package geon.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;

import geon.model.Sexo;
import geon.model.Nascimento;

public class DaoNascimento {
	
	private DaoGenerico dao;
	private String sql;
	
	public DaoNascimento() {
		dao = new DaoGenerico();
	}

	public Integer add(Nascimento o, int codigo) throws SQLException {
		try {
			dao.begin();
			sql = "Insert Into TbNascimento (PesCodigo, NasSexo, NasDataNascimento, NasCidade, NasEstado, NasPais) Values (?, ?, ?, ?, ?, ?)";
			dao.executeCommand(sql, codigo, o.getSexo().toString(), o.getDataNascimento(), o.getCidade().getCodigo(), o.getEstado().getCodigo(), o.getPais().getCodigo());
			dao.commit();
		} catch (Exception e) {
			Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, e);
			dao.rollback();
		}
		return codigo;
	}

	public void upd(Nascimento o, int codigo) throws SQLException {
		try {
			dao.begin();
			sql = "Update TbNascimento Set NasSexo = ?, NasDataNascimento = ?, NasCidade = ?, NasEstado = ?, NasPais = ? Where PesCodigo = ?";
			dao.executeCommand(sql, o.getSexo().toString(), o.getDataNascimento(), o.getCidade().getCodigo(), o.getEstado().getCodigo(), o.getPais().getCodigo(), codigo);
			dao.commit();
		} catch (Exception e) {
			Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, e);
			dao.rollback();
		}
	}

	public void del(int codigo) throws SQLException {
		try {
			dao.begin();
			sql = "Delete From TbNascimento Where PesCodigo = ?";
			dao.executeCommand(sql, codigo);
			dao.commit();
		} catch (Exception e) {
			Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, e);
			dao.rollback();
		}	
	}

	public Nascimento set(ResultSet rs) throws SQLException {
		DaoCidade cidade = new DaoCidade();
		DaoEstado estado = new DaoEstado();
		DaoPais pais = new DaoPais();
		Nascimento nascimento = new Nascimento();
		nascimento.setSexo(Sexo.valueOf(rs.getString("NasSexo")));
		nascimento.setDataNascimento(rs.getDate("NasDataNascimento"));
		nascimento.setCidade(cidade.get(rs.getInt("NasCidade")));
		nascimento.setEstado(estado.get(rs.getInt("NasEstado")));
		nascimento.setPais(pais.get(rs.getInt("NasPais")));
		return nascimento;
	}

	public Nascimento get(int codigo) throws SQLException {
		Nascimento nascimento = null;
		sql = "Select NasSexo, NasDataNascimento, NasCidade, NasEstado, NasPais From TbNascimento Where PesCodigo = ?";
		ResultSet rs = dao.executeQuery(sql, codigo);
		if (rs.next()) {
			nascimento = set(rs);
		}
		rs.close();
		return nascimento;
	}

}
